package me.zhengjie.tool;

import com.google.common.collect.Maps;

import java.util.Map;

/**
 * 在业务经办过程中记录原表字段值（或特殊操作），业务场景中多用于在回退或撤销时取出，更新回原值
 */
public class BackupTool {

    private BackupTool(){}

    private static final String CAE194 = "cae194";

    /**
     * 备份字段
     * @param aaz002 需要备份的业务日志ID
     * @param needBackupMap 需要备份的字段map
     */
    public static void backupMap (String aaz002, Map needBackupMap) {
//        //校验NPE
//        NPETool.isEmptyThrowException(aaz002, "需要备份的aaz002");
//        NPETool.isEmptyThrowException(needBackupMap, "需要备份的map");
//        //把需要转换的map转换成json格式
//        String needBackupJSON = JsonFactory.bean2json(needBackupMap);
//        //组织sql需要的参数
//        Map parametersMap = new MyMap().putValue("aaz002", aaz002).putValue(CAE194, needBackupJSON);
//        //检查是否已经存在业务日志ID所对应的备份信息
//        Object ae53Object = DBHandler.getDao().queryForObject("benefitcommon.queryAe53", parametersMap);
//        if (ValidateUtil.isEmpty(ae53Object)) {
//            DBHandler.getDao().insert("benefitcommon.insertAe53Json", parametersMap);
//        } else {
//            //如果cae194已经备份的有值，则会把新的需要备份的值put到进去，如果存在key一样，则会覆盖
//            Map ae53Map = (Map)ae53Object;
//            if (!ValidateUtil.isEmpty(ae53Map.get(CAE194))) {
//                Map existedCae194Map = JsonFactory.json2bean(ae53Map.get(CAE194).toString(), HashMap.class);
//                existedCae194Map.putAll(needBackupMap);
//                parametersMap.put(CAE194, JsonFactory.bean2json(existedCae194Map));
//            }
//            DBHandler.getDao().update("benefitcommon.updateAe53Json", parametersMap);
//        }
    }

    /**
     * 备份字段(用于处理批量事件)
     * @param aaz002 需要备份的业务日志ID
     * @param aaz010 需要备份的当事人ID（用于处理批量事件）
     * @param needBackupMap 需要备份的字段map
     */
    public static void backupMap (String aaz002, String aaz010, Map needBackupMap) {
//        //校验NPE
//        NPETool.isEmptyThrowException(aaz002, "需要备份的aaz002");
//        NPETool.isEmptyThrowException(aaz010, "需要备份的aaz010");
//        NPETool.isEmptyThrowException(needBackupMap, "需要备份的map");
//        //把需要转换的map转换成json格式
//        String needBackupJSON = JsonFactory.bean2json(needBackupMap);
//        //组织sql需要的参数
//        Map parametersMap = new MyMap().putValue("aaz002", aaz002).putValue("aaz010", aaz010).putValue(CAE194, needBackupJSON);
//        //检查是否已经存在业务日志ID所对应的备份信息
//        Object ae53Object = DBHandler.getDao().queryForObject("benefitcommon.queryAe53", parametersMap);
//        if (ValidateUtil.isEmpty(ae53Object)) {
//            DBHandler.getDao().insert("benefitcommon.insertAe53Json", parametersMap);
//        } else {
//            //如果cae194已经备份的有值，则会把新的需要备份的值put到进去，如果存在key一样，则会覆盖
//            Map ae53Map = (Map)ae53Object;
//            if (!ValidateUtil.isEmpty(ae53Map.get(CAE194))) {
//                Map existedCae194Map = JsonFactory.json2bean(ae53Map.get(CAE194).toString(), HashMap.class);
//                existedCae194Map.putAll(needBackupMap);
//                parametersMap.put(CAE194, JsonFactory.bean2json(existedCae194Map));
//            }
//            DBHandler.getDao().update("benefitcommon.updateAe53Json", parametersMap);
//        }
    }

    /**
     * 获取已经备份的字段放入返回的map中
     * @param aaz002 需要获取备份信息的业务日志ID
     * @return
     */
    public static Map recoverMap (String aaz002) {
//        //NPE检查
//        NPETool.isEmptyThrowException(aaz002, "需要获取备份信息的aaz002");
//        //根据aaz002获取备份信息
//        Map parametersMap = new MyMap().putValue("aaz002", aaz002);
//        Object ae53Object = DBHandler.getDao().queryForObject("benefitcommon.queryAe53", parametersMap);
//        //把检索出的备份信息从JSON格式转换成map返回
//        if (!ValidateUtil.isEmpty(ae53Object)) {
//            Map ae53Map = (Map)ae53Object;
//            if (!ValidateUtil.isEmpty(ae53Map.get(CAE194))) {
//                return JsonFactory.json2bean(ae53Map.get(CAE194).toString(), HashMap.class);
//            }
//        }
        return Maps.newHashMap();
    }

    /**
     * 获取已经备份的字段放入返回的map中
     * @param aaz002 需要获取备份信息的业务日志ID
     * @param aaz010 需要备份的当事人ID（用于处理批量事件）
     * @return
     */
    public static Map recoverMap (String aaz002, String aaz010) {
//        //NPE检查
//        NPETool.isEmptyThrowException(aaz002, "需要获取备份信息的aaz002");
//        //根据aaz002获取备份信息
//        Map parametersMap = new MyMap().putValue("aaz002", aaz002).putValue("aaz010", aaz010);
//        Object ae53Object = DBHandler.getDao().queryForObject("benefitcommon.queryAe53", parametersMap);
//        //把检索出的备份信息从JSON格式转换成map返回
//        if (!ValidateUtil.isEmpty(ae53Object)) {
//            Map ae53Map = (Map)ae53Object;
//            if (!ValidateUtil.isEmpty(ae53Map.get(CAE194))) {
//                return JsonFactory.json2bean(ae53Map.get(CAE194).toString(), HashMap.class);
//            }
//        }
        return Maps.newHashMap();
    }

}
